﻿using Dlls;
using Persistencia;
using Servicos.Servico;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using UI.Models;
using UI.Views.Consultas;
using Servicos;

namespace UI.Views.Cadastros
{
    /// <summary>
    /// Interaction logic for frmCadastroPessoas.xaml
    /// </summary>
    public partial class frmCadastroPessoas : Window
    {

        private Basicos.Cep consultaCep;
        private Context contexto;
        private Pessoa pessoa;
        private PessoasDLL pessoas;
        private GrupoPessoasDLL grupoDePessoas;
        public int codigoParaAlterarOuDeletar = 0;
        private int codGrupo;
        private base_cep endereco;
        private Persistencia.Endereco EnderecosTable;
        private EnderecoDLL enderecoDll;
        

        public List<base_cep> lista;

        public frmCadastroPessoas() { }

        public frmCadastroPessoas(int codigo)
        {
         try
            {

            InitializeComponent();
            contexto = new Context();
            enderecoDll = new EnderecoDLL();
            EnderecosTable = new Persistencia.Endereco();
            pessoa = new Pessoa();
            pessoas = new PessoasDLL();
            consultaCep = new Basicos.Cep();
            grupoDePessoas = new GrupoPessoasDLL();
            ckSituacao.IsChecked = false;
            cbxGrupoPessoas.ItemsSource = grupoDePessoas.List().Select(o => o.Nome.ToString());
            lista = new List<base_cep>();
            if (codigo != 0)
            {
                codigoParaAlterarOuDeletar = codigo;
            }

            }
        catch (Exception e)
          {

              MessageBox.Show("Erro", e.Message);
          }
        }

        private void InsertOrUpdate(object sender, RoutedEventArgs e)
        {
            try
            {
                if (ValidaCPFCNPJ())
                {
                    if (txtCodigo.Text != "")
                    {
                        if (ckCliente.IsChecked == true)
                        {
                            pessoa.CliFor = Convert.ToChar("C");
                        }
                        else if (ckFornecedor.IsChecked == true)
                        {
                            pessoa.CliFor = Convert.ToChar("F");
                        }

                        if (cbxTipoPessoa.Text == "Pessoa Física")
                        {
                            pessoa.PJPF = Convert.ToChar("F");
                        }
                        else if (cbxTipoPessoa.Text == "Pessoa Jurídica")
                        {
                            pessoa.PJPF = Convert.ToChar("J");
                        }
                        pessoa.Situacao = ckSituacao.IsChecked;
                        pessoa.Nome = txtNome.Text;
                        pessoa.FantasiaApelido = txtFantasiaApelido.Text;
                        pessoa.Telefone = txtTelefone.Text;
                        pessoa.Telefone2 = txtTelefone.Text;
                        pessoa.Contato = txtContato.Text;
                        pessoa.CPFCNPJ = txtCPFCNPJ.Text;
                        pessoa.Email = txtEmail.Text;
                        pessoa.InscricaoEstadual = txtInscricaoEstadual.Text;
                        string grupo = cbxGrupoPessoas.Text.ToString();
                        pessoa.CodGrupo = int.Parse(grupoDePessoas.getCodigoPorNomeGrupo(grupo).Codigo.ToString());
                        pessoas.Update(codigoParaAlterarOuDeletar, pessoa);

                        MessageBox.Show("Cadastro atualizado com sucesso.");
                        Classes.LimpaCampos.reset(0, this);
                        pessoa = new Pessoa();
                        
                    }
                    else
                    {
                        if (ckCliente.IsChecked == true)
                        {
                            pessoa.CliFor = Convert.ToChar("C");
                        }
                        else if (ckFornecedor.IsChecked == true)
                        {
                            pessoa.CliFor = Convert.ToChar("F");
                        }

                        if (cbxTipoPessoa.Text == "Pessoa Física")
                        {
                            pessoa.PJPF = Convert.ToChar("F");
                        }
                        else if (cbxTipoPessoa.Text == "Pessoa Jurídica")
                        {
                            pessoa.PJPF = Convert.ToChar("J");
                        }
                        pessoa.Situacao = ckSituacao.IsChecked;
                        pessoa.Nome = txtNome.Text;
                        pessoa.FantasiaApelido = txtFantasiaApelido.Text;
                        pessoa.Telefone = txtTelefone.Text;
                        pessoa.Telefone2 = txtTelefone.Text;
                        pessoa.Contato = txtContato.Text;
                        pessoa.CPFCNPJ = txtCPFCNPJ.Text;
                        pessoa.Email = txtEmail.Text;
                        pessoa.InscricaoEstadual = txtInscricaoEstadual.Text;
                        string grupo = cbxGrupoPessoas.Text.ToString();
                        pessoa.CodGrupo = int.Parse(grupoDePessoas.getCodigoPorNomeGrupo(grupo).Codigo.ToString());

                        pessoas.Insert(pessoa);
                        MessageBox.Show("Pessoa cadastrada com sucesso.");
                        AdicionarEndereco(pessoa.Codigo, int.Parse(txtCEP.Text), cbxTipoEndereco.Text.ToString(), txtNumero.Text, txtLogradouro.Text, txtCidade.Text, txtBairro.Text, txtUF.Text, txtReferencia.Text);
                        Classes.LimpaCampos.reset(0, this);
                        pessoa = new Pessoa();
                    }
                }
                else
                {
                    MessageBox.Show("CPF/CNPJ Inválidos");
                }
                
            }
            catch (Exception)
            {

                MessageBox.Show("Registro não pode ser gravado favor verificar o correto preenchimento dos campos");
            }
            
        }


        public void MostrarCodigo(object sender, SelectionChangedEventArgs e)
        {
            if (cbxGrupoPessoas.Text!="")
            {
                string grupo = cbxGrupoPessoas.Text.ToString();
                codGrupo = int.Parse(grupoDePessoas.getCodigoPorNomeGrupo(grupo).Codigo.ToString()); 
            }
           
        }

        private void ConsultarCep(object sender, KeyEventArgs e)
        {
            ConsultarCEP(e);
        }

        private void ConsultarCEP(KeyEventArgs e)
        {
            try
            {
                if (e.Key == Key.Enter) 
                {
                        endereco = consultaCep.Consultar(int.Parse(txtCEP.Text.ToString()));
                        if (endereco != null)
                        {
                            txtCEP.Text = endereco.cep.ToString();
                            txtLogradouro.Text = endereco.logradouro;
                            txtCidade.Text = endereco.cidade;
                            txtBairro.Text = endereco.bairro;
                            txtUF.Text = endereco.estado;
                        }
                        else
                        {
                            MessageBox.Show("CEP não cadastrado , favor verificar ou preencher o endereço manualmente");
                        }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Ocorreu um erro não consulta do CEP, favor preencher o campo apenas com numeros");

            }
        }
	              

        private void EditarPessoa(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
             
                if (txtCodigo.Text.ToString() != "")
                {
                    codigoParaAlterarOuDeletar = int.Parse(txtCodigo.Text.ToString());
                    if (codigoParaAlterarOuDeletar != 0)
                    {
                        Pessoa pessoa = pessoas.getPessoa(codigoParaAlterarOuDeletar);
                        Persistencia.Endereco endereco = enderecoDll.getEndereco(codigoParaAlterarOuDeletar);

                        if (pessoa != null)
                        {
                            GrupoPessoa grupo = grupoDePessoas.getGrupoPessoa(int.Parse(pessoa.CodGrupo.ToString()));
                            cbxGrupoPessoas.Text = grupo.Nome;

                            if (pessoa.CliFor == 'C')
                            {
                                ckCliente.IsChecked = true;
                            }
                            else if (pessoa.CliFor == 'F')
                            {
                                ckFornecedor.IsChecked = true;
                            }

                            if (pessoa.PJPF =='F')
                            {
                                cbxTipoPessoa.Text = "Pessoa Física";
                            }
                            else if (pessoa.PJPF =='J') 
                            {
                                cbxTipoPessoa.Text = "Pessoa Jurídica";
                            }

                            ckSituacao.IsChecked = pessoa.Situacao;
                            txtNome.Text = pessoa.Nome;
                            txtFantasiaApelido.Text = pessoa.FantasiaApelido;
                            txtCPFCNPJ.Text = pessoa.CPFCNPJ;
                            txtContato.Text = pessoa.Contato;
                            txtEmail.Text = pessoa.Email;
                            txtTelefone.Text = pessoa.Telefone;
                            txtTelefone2.Text = pessoa.Telefone2;
                            txtInscricaoEstadual.Text = pessoa.InscricaoEstadual;

                            if (endereco!=null)
                            {
                                cbxTipoEndereco.Text = endereco.Tipo.ToString();
                                txtCEP.Text = endereco.Cep.ToString();
                                txtLogradouro.Text = endereco.Logradouro;
                                txtCidade.Text = endereco.Cidade;
                                txtCidade.Text = endereco.Cidade;
                                txtBairro.Text = endereco.Bairro;
                                txtUF.Text = endereco.Estado;
                                txtReferencia.Text = endereco.PontoReferencia; 
                            }
                            
                        }
                        else
                        {
                            MessageBox.Show("Pessoa não encontrada.");
                        }

                    }
                }
                else
                {
                    frmConsultaPadrao consultaPadrao = new frmConsultaPadrao("Pessoas");
                    consultaPadrao.Owner = this;
                    consultaPadrao.Show();
                }
            }
        }

        //public List<base_cep> serializarJsonEndereco(Pessoa pessoa)
        //{
        //   return Newtonsoft.Json.JsonConvert.DeserializeObject<List<base_cep>>(pessoa.Endereco);              
        // }
         

        public void Delete(object sender, RoutedEventArgs e)
        {
                if (txtCodigo.Text !="")
                {
                    pessoas.Delete(int.Parse(txtCodigo.Text));
                    MessageBox.Show("Pessoa excluida com sucesso.");  
                }
                else
                {
                    MessageBox.Show("Selecione um registro para excluir."); 
                }
            
        }

        public void Novo(object sender, RoutedEventArgs e)
        {
            Classes.LimpaCampos.reset(0, this);
        }

        private void ValidaTipoPessoa(object sender, SelectionChangedEventArgs e)
        {
            if (cbxTipoPessoa.SelectedIndex == 0)
            {
                txtCPFCNPJ.MaxLength = 11;
                lblInscricaoEstadual.Visibility = Visibility.Hidden;
                txtInscricaoEstadual.Visibility = Visibility.Hidden;
            }
            else if (cbxTipoPessoa.SelectedIndex == 1)
            {
                txtCPFCNPJ.MaxLength = 14;
                lblInscricaoEstadual.Visibility = Visibility.Visible;
                txtInscricaoEstadual.Visibility = Visibility.Visible;
            }
        }

        public bool ValidaCPFCNPJ()
        {
            bool valido = false;
            if (cbxTipoPessoa.SelectedIndex == 0)
            {
                valido = ValidaCPF.IsCpf(txtCPFCNPJ.Text);
            }

            else if (cbxTipoPessoa.SelectedIndex == 1)
            {
                valido = ValidarCNPJ.IsCnpj(txtCPFCNPJ.Text);
            }
            return valido;
        }

        private void txtCEP_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                ConsultarCEP(e);
            }

        }
        public void AdicionarEndereco(int icodPessoa,int icep ,string iTipoEndereco,string inumero, string ilogradouro,string icidade,string ibairro,string iuf,string ireferencia)
        {
            EnderecosTable.CodPessoa = icodPessoa;
            EnderecosTable.Cep = icep;
            EnderecosTable.Tipo = iTipoEndereco;
            EnderecosTable.Numero = inumero;
            EnderecosTable.Logradouro = ilogradouro;
            EnderecosTable.Cidade = icidade;
            EnderecosTable.Bairro = ibairro;
            EnderecosTable.Estado = iuf;
            EnderecosTable.PontoReferencia = ireferencia;
            enderecoDll.Insert(EnderecosTable);
            EnderecosTable = new Persistencia.Endereco();

        }

        private void btnEndereco_Click(object sender, RoutedEventArgs e)
        {
            frmConsultarCep frm = new frmConsultarCep();
            frm.ShowDialog();
        }

        private void ReportGeral(object sender, RoutedEventArgs e)
        {
         
           
        }

        private void ListBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {

        }


    }
}
